(function() {
	var utils = baidu.editor.utils, uiUtils = baidu.editor.ui.uiUtils, domUtils = baidu.editor.dom.domUtils, Button = baidu.editor.ui.Button, PopupButton = baidu.editor.ui.PopupButton = function(
			options) {
		this.initOptions(options);
		this.initPopupButton();
	};
	PopupButton.prototype = {
		popup : null,
		uiName : 'button',
		title : '',
		initPopupButton : function() {
			this.initButton();
			var me = this;
			if (this.popup != null) {
				var popup = this.popup;
				this.popup = null;
				this.setPopup(popup);
			}
		},
		setPopup : function(popup) {
			if (this.popup === popup)
				return;
			if (this.popup != null) {
				this.popup.dispose();
			}
			popup.addListener('show', utils.bind(this._onPopupShow, this));
			popup.addListener('hide', utils.bind(this._onPopupHide, this));
			popup.addListener('postrender', utils.bind(function() {
				popup
						.getDom('body')
						.appendChild(uiUtils
										.createElementByHtml('<div id="'
												+ this.popup.id
												+ '_bordereraser" class="edui-bordereraser edui-background" style="width:'
												+ (uiUtils.getClientRect(this
														.getDom()).width - 2)
												+ 'px"></div>'));
				popup.getDom().className += ' ' + this.className;
			}, this));
			this.popup = popup;
		},
		_onPopupShow : function() {
			this.addState('opened');
		},
		_onPopupHide : function() {
			this.removeState('opened');
		},
		showPopup : function() {
			// 当popup往上弹出的时候，做特殊处理
			var rect = uiUtils.getClientRect(this.getDom());
			rect.top -= this.popup.SHADOW_RADIUS;
			rect.height += this.popup.SHADOW_RADIUS;
			this.popup.showAnchorRect(rect);
		},
		_onClick : function(event, el) {
			if (!this.isDisabled()) {
				this.showPopup();
			}
		}
	};
	utils.inherits(PopupButton, Button);

})();
